#!/usr/bin/env python
# -*- coding: utf-8 -*-
from applications.extensions.db_plugin import db
from werkzeug.security import generate_password_hash, check_password_hash
from sqlalchemy_utils import PhoneNumberType, EmailType
from common.utils.helpers import now_beijing


class User(db.Model):
    id = db.Column(db.Integer, primary_key=True)

    # 基础信息
    username = db.Column(db.String(80), unique=True, nullable=False, comment="用户名")
    password_hash = db.Column(db.String(255), nullable=False, comment="密码")
    phone = db.Column(db.String(11), unique=True, nullable=False, comment="手机号")
    email = db.Column(EmailType(120), unique=True, nullable=False, comment="邮箱")

    # 状态信息
    avatar = db.Column(db.String(255), comment="用户头像")
    is_delete = db.Column(db.Boolean, default=False, comment="是否删除")
    is_active = db.Column(db.Boolean, default=True, comment="是否激活")

    # 时间信息（注意：不使用 server_default / server_onupdate）
    create_time = db.Column(
        db.DateTime,
        default=now_beijing,
        nullable=False,
        comment="创建时间"
    )
    update_time = db.Column(
        db.DateTime,
        default=now_beijing,
        onupdate=now_beijing,
        nullable=False,
        comment="更新时间"
    )

    def set_password(self, password):
        """生成密码的 hash 值"""
        self.password_hash = generate_password_hash(password)

    def check_password(self, password):
        """验证密码是否正确"""
        return check_password_hash(self.password_hash, password)

# 如果需要手机号格式校验，可以使用以下方式：
# phone = db.Column(PhoneNumberType(), unique=True, nullable=False, comment="手机号")
